package com.supcalls;

import java.util.*;
import java.util.function.*;
import java.util.stream.Collectors;

public class LambdaExample {
    public static void main(String[] args) {
        // 1. 使用 Lambda 表达式创建线程
        new Thread(() -> System.out.println("Hello from Lambda!")).start();

        // 2. 使用 Lambda 进行排序
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
        names.sort((a, b) -> a.compareToIgnoreCase(b));
        System.out.println("Sorted names: " + names);

        // 3. 使用 Function 进行转换 (将字符串转换为大写)
        Function<String, String> toUpperCase = s -> s.toUpperCase();
        System.out.println("Uppercase: " + toUpperCase.apply("hello"));

        // 4. 使用 Predicate 进行过滤 (筛选长度大于3的字符串)
        List<String> filteredNames = names.stream()
                .filter(s -> s.length() > 3)
                .collect(Collectors.toList());
        System.out.println("Filtered names (length > 3): " + filteredNames);

        // 5. 使用 Consumer 进行遍历 (打印所有元素)
        Consumer<String> printConsumer = s -> System.out.println("Name: " + s);
        names.forEach(printConsumer);

        // 6. 使用 Supplier 生成值
        Supplier<Double> randomSupplier = () -> Math.random();
        System.out.println("Random number: " + randomSupplier.get());

        // 7. 使用 Stream API 进行集合处理
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> squaredNumbers = numbers.stream()
                .map(n -> n * n)
                .collect(Collectors.toList());
        System.out.println("Squared numbers: " + squaredNumbers);

        // 8. 使用 Optional 处理可能为空的值
        Optional<String> optionalName = names.stream().filter(n -> n.startsWith("B")).findFirst();
        optionalName.ifPresent(n -> System.out.println("Found name: " + n));
    }
}

